# Лекция: Перечисления (enum) в Java

Перечисления (enum) в Java используются для представления группы именованных констант. Они являются специальным типом класса, и каждое значение перечисления представляет собой экземпляр этого класса.

## Объявление перечислений

Перечисления объявляются с помощью ключевого слова `enum`.

```java
enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
```

## Использование перечислений

Перечисления могут быть использованы как любой другой тип данных в Java.

```java
Day today = Day.MONDAY;
```

## Методы перечислений

Перечисления имеют несколько встроенных методов, таких как `values()`, `valueOf()`, `ordinal()` и `name()`.

```java
Day[] days = Day.values(); // возвращает массив всех значений перечисления
Day monday = Day.valueOf("MONDAY"); // возвращает значение перечисления по его имени
int ordinal = Day.MONDAY.ordinal(); // возвращает порядковый номер значения перечисления
String name = Day.MONDAY.name(); // возвращает имя значения перечисления
```

---

# Практические задания

1. **Создайте перечисление `Color` с значениями `RED`, `GREEN` и `BLUE`.** (Сложность: 1/5)
```java
enum Color {
    RED, GREEN, BLUE
}
```

2. **Создайте переменную `myColor` типа `Color` и присвойте ей значение `GREEN`.** (Сложность: 1/5)
```java
Color myColor = Color.GREEN;
```

3. **Создайте перечисление `Day` с значениями дней недели. Выведите все значения перечисления с помощью метода `values()`.** (Сложность: 2/5)
```java
enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

for (Day day : Day.values()) {
    System.out.println(day);
}
```

4. **Создайте перечисление `Month` с значениями месяцев. Выведите имя и порядковый номер каждого значения перечисления с помощью методов `name()` и `ordinal()`.** (Сложность: 3/5)
```java
enum Month {
    JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER
}

for (Month month : Month.values()) {
    System.out.println(month.name() + ": " + month.ordinal());
}
```

5. **Создайте перечисление `Season` с значениями `SPRING`, `SUMMER`, `AUTUMN` и `WINTER`. Добавьте в перечисление метод `getAverageTemperature`, который возвращает среднюю температуру для каждого сезона.** (Сложность: 4/5)
```java
enum Season {
    SPRING, SUMMER, AUTUMN, WINTER;

    int getAverageTemperature() {
        switch (this) {
            case SPRING:
                return 15;
            case SUMMER:
                return 25;
            case AUTUMN:
                return 10;
            case WINTER:
                return -5;
            default:
                return 0;
        }
    }
}

for (Season season : Season.values()) {
    System.out.println(season.name() + ": " + season.getAverageTemperature());
}
```